package com.czm.art_light.util;

import org.apache.commons.text.StringEscapeUtils;
import org.jsoup.Jsoup;
import org.jsoup.safety.Safelist;

public class XSSUtil {
    public static String cleanXSS(String value) {
        if (value == null) {
            return null;
        }
        // 使用 Jsoup 过滤 HTML 标记
        //仅保留 Safelist 允许的标签和属性
        //生成符合白名单规则的纯净HTML片段
        String cleanValue = Jsoup.clean(value, Safelist.basic());

        // 使用 Apache Commons Text 进行 HTML 转义
        return StringEscapeUtils.escapeHtml4(cleanValue);
    }

    public static boolean isValidImageUrls(String imageUrls) {
        if (imageUrls == null || imageUrls.isEmpty()) {
            return true; // 允许为空
        }

        // 整体结构校验（JSON数组格式）
        if (!imageUrls.matches("^\\s*\\[.*]\\s*$")) {
            return false;
        }

        // 去除首尾方括号和空白
        String content = imageUrls.replaceAll("^\\s*\\[|]\\s*$", "");

        // 空数组校验
        if (content.trim().isEmpty()) {
            return true;
        }

        // 分割数组元素（支持带引号和空格的逗号分隔）
        String[] elements = content.split("\\s*,\\s*");

        // 严格路径正则表达式
        String pathPattern = "^\"?/images/feedback/"
                + "(20\\d{2})"                     // 年：2000-2099
                + "/(0[1-9]|1[0-2])"              // 月：01-12
                + "/(0[1-9]|[12]\\d|3[01])"       // 日：01-31
                + "/[a-f0-9]{32}\\.jpg"           // 文件名：32位hex
                + "\"?$";                         // 支持带引号的元素

        for (String element : elements) {
            // 移除首尾引号并验证路径
            String url = element.replaceAll("^\"|\"$", "");
            if (!url.matches(pathPattern)) {
                return false;
            }
        }
        return true;
    }
}